package momo.multitree.algo;

import momo.multitree.structure.*;

import java.io.FileReader;
import java.util.LinkedHashSet;

import junit.framework.TestCase;


public class LatencyDijkstraTest extends TestCase {
	
	
	public void testMaliciousGraph() throws Exception {
		Graph g = new Graph(new FileReader("src/dataset/5_node_dataset_7.txt"));
		LatencyDijkstra app = new LatencyDijkstra();
		Tree optLatTree = app.optimumTree(g);
		
		
		Node n0 = new Node("0", 0.0, 0.05675378900801975);
		Node n1 = new Node("1", 0.0, 0.2114196645342714);
		Node n2 = new Node("2", 0.4, 0.35072583071719254);
		Node n3 = new Node("3", 0.2, 0.456839294904006);
		Node n4 = new Node("4", 0.4, 0.8861642045949081);
		
		Edge e1 = new Edge("1", n2, n4, 0.0, 0.0, 5.0, 9.0);
		Edge e2 = new Edge("0", n2, n3, 0.0, 0.0, 18.0, 8.0);
		Edge e3 = new Edge("4", n0, n2, 290.0, 283.0, 167.0, 223.0);
		Edge e4 = new Edge("7", n1, n2, 224.0, 229.0, 393.0, 213.0);
		
		Tree cG = new Tree(n2);
		cG.add(e1);
		cG.add(e2);
		cG.add(e3);
		cG.add(e4);
		
		System.out.println("OptLat: " + optLatTree.compWeightedLatency());
		System.out.println("cG: " + cG.compWeightedLatency());
	}
	

//	public void testCalObjCost()
//	{
//		LatencyDijkstra app = new LatencyDijkstra();
//		Node root = new Node(1, 0.5, 0.6); //root node
//		Node node2 = new Node(2, 0.1, 0.3);
//		Node node3 = new Node(3, 0.1, 0.8);
//		Node node4 = new Node(4, 0.1, 0.4);
//		Node node5 = new Node(5, 0.2, 0.9);
//		
//		Edge edge1 = new Edge(1, root, node2, 5, 2, 6, 6);
//		Edge edge2 = new Edge(2, root, node3, 4, 3, 3, 3);
//		Edge edge3 = new Edge(3, node2, node4, 1, 7, 2, 2);
//		Edge edge4 = new Edge(4, node2, node5, 10, 0, 1, 1);
//		
//		LinkedHashSet<Node> S = new LinkedHashSet<Node>();
//		LinkedHashSet<Edge> Et = new LinkedHashSet<Edge>();
//		
//		S.add(root);
//		assertEquals(3.6, app.calObjCost(S, node2, Et, edge1), 0.00000001);
//		
//		S.add(node2);
//		Et.add(edge1);
//		assertEquals(4.8, app.calObjCost(S, node3, Et, edge2), 0.00000001);
//		
//		S.add(node3);
//		Et.add(edge2);
//		assertEquals(7.9, app.calObjCost(S, node4, Et, edge3), 0.00000001);
//		
//		S.add(node4);
//		
//	Et.add(edge3);
//		assertEquals(11, app.calObjCost(S, node5, Et, edge4), 0.00000001);
//	}
//
//	public void testOneOptimumTree()
//	{
//		Node node1 = new Node(1, 0.3, 1);
//		Node node2 = new Node(2, 0.2, 1);
//		Node node3 = new Node(3, 0.1, 1);
//		Node node4 = new Node(4, 0.1, 1);
//		Node node5 = new Node(5, 0.2, 1);
//		Node node6 = new Node(6, 0.1, 1);
//		
//		Edge edge1 = new Edge(1, node1, node2, 1, 1, 3, 3);
//		Edge edge2 = new Edge(2, node1, node3, 1, 1, 2, 2);
//		Edge edge3 = new Edge(3, node2, node3, 1, 1, 1, 1);
//		Edge edge4 = new Edge(4, node2, node5, 1, 1, 2, 2);
//		Edge edge5 = new Edge(5, node3, node5, 1, 1, 4, 4);
//		Edge edge6 = new Edge(6, node3, node6, 1, 1, 6, 6);
//		Edge edge7 = new Edge(7, node6, node5, 1, 1, 2, 2);
//		Edge edge8 = new Edge(8, node4, node5, 1, 1, 1, 1);
//		Edge edge9 = new Edge(9, node2, node4, 1, 1, 4, 4);
//		
//		Graph graph = new Graph();
//		graph.add(edge1);
//		graph.add(edge2);
//		graph.add(edge3);
//		graph.add(edge4);
//		graph.add(edge5);
//		graph.add(edge6);
//		graph.add(edge7);
//		graph.add(edge8);
//		graph.add(edge9);
//		
//		LatencyDijkstra app = new LatencyDijkstra();
//		Tree tree1 = app.optimumTree(graph, node1);
//		
//		Tree tree2 = new Tree(node1);
//		tree2.add(edge2);
//		tree2.add(edge1);
//		tree2.add(edge4);
//		tree2.add(edge8);
//		tree2.add(edge7);
//		
//		assertTrue(tree2.compare(tree1));
//	}
//	
//	public void testOptimumTree()
//	{
//		Node node1 = new Node(1, 0.3, 1);
//		Node node2 = new Node(2, 0.2, 1);
//		Node node3 = new Node(3, 0.1, 1);
//		Node node4 = new Node(4, 0.1, 1);
//		Node node5 = new Node(5, 0.2, 1);
//		Node node6 = new Node(6, 0.1, 1);
//		
//		Edge edge1 = new Edge(1, node1, node2, 1, 1, 3, 3);
//		Edge edge2 = new Edge(2, node1, node3, 1, 1, 2, 2);
//		Edge edge3 = new Edge(3, node2, node3, 1, 1, 1, 1);
//		Edge edge4 = new Edge(4, node2, node5, 1, 1, 2, 2);
//		Edge edge5 = new Edge(5, node3, node5, 1, 1, 4, 4);
//		Edge edge6 = new Edge(6, node3, node6, 1, 1, 6, 6);
//		Edge edge7 = new Edge(7, node6, node5, 1, 1, 2, 2);
//		Edge edge8 = new Edge(8, node4, node5, 1, 1, 1, 1);
//		Edge edge9 = new Edge(9, node2, node4, 1, 1, 4, 4);
//		
//		Graph graph = new Graph();
//		graph.add(edge1);
//		graph.add(edge2);
//		graph.add(edge3);
//		graph.add(edge4);
//		graph.add(edge5);
//		graph.add(edge6);
//		graph.add(edge7);
//		graph.add(edge8);
//		graph.add(edge9);
//		
//		LatencyDijkstra app = new LatencyDijkstra();
//
//		Tree tree1 = app.optimumTree(graph, node1);
//		Tree tree2 = app.optimumTree(graph, node2);
//		Tree tree3 = app.optimumTree(graph, node3);
//		Tree tree4 = app.optimumTree(graph, node4);
//		Tree tree5 = app.optimumTree(graph, node5);
//		Tree tree6 = app.optimumTree(graph, node6);
//		
//		assertTrue(tree2.compare(app.optimumTree(graph)));
//	}
	
}
